#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>

int main() {
    int fd;
    struct termios options;

    // 打开串口设备
    fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
    if (fd == -1) {
        perror("无法打开串口设备");
        return -1;
    }

    // 配置串口参数
    tcgetattr(fd, &options);
    cfsetispeed(&options, B9600);  // 设置波特率为9600
    cfsetospeed(&options, B9600);
    options.c_cflag |= (CLOCAL | CREAD);  // 忽略调制解调器线路状态，允许接收数据
    options.c_cflag &= ~PARENB;  // 禁用奇偶校验
    options.c_cflag &= ~CSTOPB;  // 设置停止位为1位
    options.c_cflag &= ~CSIZE;  // 清除数据位设置
    options.c_cflag |= CS8;  // 设置数据位为8位
    tcsetattr(fd, TCSANOW, &options);

    // 读取和发送数据
    char buffer[255];
    int n;
    while (1) {
        // 从终端读取输入数据
        n = read(STDIN_FILENO, buffer, sizeof(buffer));
        if (n > 0) {
            // 将数据发送到串口设备
            write(fd, buffer, n);
        }

        // 从串口设备读取数据并显示到终端
        n = read(fd, buffer, sizeof(buffer));
        if (n > 0) {
            write(STDOUT_FILENO, buffer, n);
        }
    }

    // 关闭串口设备
    close(fd);

    return 0;
}
